#variable stockant les zones de texte, les scrollbar et les noms des differents salons
# on a donc pour "a" :
# var_zoneTexteSalons(a)
# var_zoneTexteSalons(a, zoneDeTexte)
# var_zoneTexteSalons(a, scrollBar)
global var_zoneTexteSalons


################################################################################
# Procedure rafraichissant les messages recus pour un salon donne
################################################################################
proc proc_afficheMessagesSalon { param_salonId } {	
	if { $param_salonId == -1 } {
		return
	}
	# Ecrit les messages dans la zone de reception
	# Commence par effacer le contenu
	global var_zoneTexteSalons
	$var_zoneTexteSalons($param_salonId,zoneDeTexte) delete 0.0 end
	
	set var_listeMessages [proc_getMessagesSalon $param_salonId]
	
	# Reaffiche tous les messages du salon
	foreach var_message $var_listeMessages {
		array set var_MessageArray $var_message
		$var_zoneTexteSalons($param_salonId,zoneDeTexte)  insert end "\[$var_MessageArray(noeudId):[proc_getNoeudPseudo $var_MessageArray(noeudId)]\] $var_MessageArray(corps)"
		$var_zoneTexteSalons($param_salonId,zoneDeTexte)  insert end "\n"
	}	
	
	# Baisse la scrollbar tout en bas (ne marche pas)
	#$var_zoneTexteSalons($param_salonId,scrollBar) set 1 1
	
	# Met a jour l'affichage
	update
	
}





################################################################################
# Procedure affichant la liste des voisins 
################################################################################
proc proc_afficheListeVoisins { } {
	set var_listeVoisinsId [proc_getListeVoisinsId]

	.content.right.frameUsers.listeVoisins delete 0 end
	
	foreach var_idVoisin $var_listeVoisinsId {	
		.content.right.frameUsers.listeVoisins insert end "$var_idVoisin \([proc_getVoisinDistance $var_idVoisin]\)"
		
	}
}

################################################################################
# Procedure affichant la liste des noeuds connectes a un salon
################################################################################
proc proc_afficheListeNoeudsConnecteSalon { param_salonId } {
	if { $param_salonId == -1 } {
		return
	}
	
	set var_listeConnectes [proc_getSalonConnectes $param_salonId]
	
	
	.content.right.frameUsers.listeUsers delete 0 end
	
	foreach var_idNoeud $var_listeConnectes {
		.content.right.frameUsers.listeUsers insert end "$var_idNoeud:[proc_getNoeudPseudo $var_idNoeud]"
	}	
}

################################################################################
# Procedure d'ajout d'un salon a l'interface
################################################################################
proc proc_ajoutSalonInterface { param_salonId } {
	global var_zoneTexteSalons
	# Generation d'un nom servant a identifier l'onglet
	set var_paneSalon "pane_$param_salonId"
	#nom du salon affiche dans l'onglet
	set nomSalon [proc_getSalonNom $param_salonId]

	set var_existeDeja [info exists var_zoneTexteSalons($param_salonId)]

	#essaie t'on d'inserer un salon qui existe deja?
	if { $var_existeDeja == 0 } {
		.content.center.frameMessages.notebookMessages insert end $var_paneSalon -text $nomSalon	
		set pane [.content.center.frameMessages.notebookMessages getframe $var_paneSalon]

		text $pane.t -bg #FFFFFF -highlightthickness 0  -relief sunken  -font {Bitstream-Vera-Sans 10 } -yscrollcommand "$pane.scrollv set" 
		scrollbar $pane.scrollv -orient vertical -command "$pane.t yview" -width 4
		pack $pane.scrollv -side right -fill y -expand 0
		pack $pane.t -expand yes -fill both
		
		# Specifie ou les message doivent etre ecrit
		#set var_listeSalons($param_salonId,zoneDeTexte) $pane.t
		
		set var_zoneTexteSalons($param_salonId,zoneDeTexte) $pane.t
		set var_zoneTexteSalons($param_salonId,scrollBar) $pane.scrollv
		set var_zoneTexteSalons($param_salonId) $param_salonId
	} else {
		
		proc_affichageErreur "Le salon $nomSalon existe deja"
	}
}

################################################################################
# Procedure d'ajout d'un salon a l'interface
################################################################################
proc proc_changerSalonInterface { param_salonId } {
	# Generation d'un nom servant a identifier l'onglet
	set var_paneSalon "pane_$param_salonId"
	callback_changementSalon $var_paneSalon
}


################################################################################
# Procedure renvoyant le salon selectionne dans la liste
################################################################################
proc proc_getSalonSelectionne { } {
	return [.content.left.frameSalons.listeSalons curselection]
}


################################################################################
# Procedure appelee au clic sur un salon
################################################################################
proc callback_connexionSalon { } {
	proc_connexionSalonNum [proc_getSalonSelectionne]
}

################################################################################
# Procedure appelee a la deconnexion d'un salon
################################################################################
proc callback_deconnexionSalon { var_param_tab} {
	regexp {pane_(.*)$} $var_param_tab null var_salonId
	proc_deconnexionSalon $var_salonId
	#.content.center.frameMessages.notebookMessages delete $var_param_tab
	#global var_zoneTexteSalons
	#unset var_zoneTexteSalons($var_salonId,zoneDeTexte)
	#unset var_zoneTexteSalons($var_salonId,scrollBar)
	#unset var_zoneTexteSalons($var_salonId)
}

################################################################################
# Procedure appelee a la deconnexion d'un salon
################################################################################
proc proc_deconnexionSalonInterface { param_salonId } {
	set var_paneSalon "pane_$param_salonId"
	.content.center.frameMessages.notebookMessages delete $var_paneSalon
	global var_zoneTexteSalons
	unset var_zoneTexteSalons($param_salonId,zoneDeTexte)
	unset var_zoneTexteSalons($param_salonId,scrollBar)
	unset var_zoneTexteSalons($param_salonId)
}


################################################################################
# Procedure appelee au changemenent de salon
################################################################################
proc callback_changementSalon { var_param_tab} {
	
	regexp {pane_(.*)$} $var_param_tab null var_salonId

	proc_setSalonCourantId $var_salonId
	.content.center.frameMessages.notebookMessages raise $var_param_tab
	proc_afficheListeNoeudsConnecteSalon [proc_getSalonCourantId]
	proc_afficheMessagesSalon [proc_getSalonCourantId]
}

################################################################################
# Procedure de mise a jour de la liste des salons
################################################################################
proc proc_updateListeSalons { } {
	
	# Recupere la liste des salons via sa variable globale
	set var_listeSalons [proc_getListeIdsSalons]

	# Efface l'affichage de l'ancienne liste
	.content.left.frameSalons.listeSalons delete 0 end
	
	# Affiche la nouvelle liste (le tri fonctionne sur les clefs => a modifier pour trier sur le nom)
	# et cree les objets du tableau de message
	foreach var_idSalon $var_listeSalons {
		.content.left.frameSalons.listeSalons insert end [proc_getSalonNom $var_idSalon]
	}	
	# Met a jour l'affichage
	update
}

################################################################################
# Procedure affichant periodiquement la liste des voisins
################################################################################
proc proc_voisinsAfficher { } {
	global const_delaiAffichageListeVoisins
	#affiche la liste des voisins
	proc_afficheListeVoisins
	# programmation du prochain affichage
	after $const_delaiAffichageListeVoisins proc_voisinsAfficher
}

